package com.vcc.channel.base.service;

import com.vcc.channel.base.model.request.*;
import com.vcc.channel.base.model.response.*;

import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;

/**
 * 渠道调用公共包装
 */
public interface ChannelBaseService {

    Object openCard(HashMap<String, Object> requestParams);

    Object openShareCard(HashMap<String, Object> requestParams);

    Boolean recharge(CardRechargeDto cardRechargeDto);

    Boolean withdraw(CardWithdrawDto cardWithdrawDto);

    Boolean cancelCard(CardCancelDto cardCancelDto);

    Boolean blockCard(String channelCardId, String requestId);

    Boolean unblockCard(String channelCardId, String requestId);

    PageVo<PageTransactionVo> pagingTransaction(
            Integer pageNumber,
            Integer pageSize,
            String channelCardId,
            String transactionType,
            String status,
            Date startTime, 
            Date endTime);

    PageVo<PageTransactionVo> pagingTransaction(Integer pageNumber, Integer pageSize, String transactionType, String status, Date startTime, Date endTime);

    PageTransactionVo queryTransaction(String transactionId);

    PageVo<PageClearingVo> pagingClearing(Integer pageNumber, Integer pageSize, String channelCardId, String transactionType, String status, Date startTime, Date endTime);

    PageVo<PageClearingVo> pagingClearing(Integer pageNumber, Integer pageSize, String transactionType, String status, Date startTime, Date endTime);

    PageClearingVo queryClearing(String transactionId);

    BigDecimal queryAccountBalance();

    BigDecimal queryAccountBalance(String accountId);

    BigDecimal queryCardBalance(String channelCardId);

    String queryCardStatus(String channelCardId);

    PageVo<PageOperationLogVo> pagingOperationLog(Integer pageNumber, Integer pageSize, String type, Date startTime, Date endTime);

    PageOperationLogVo queryOperationLog(String requestId);

    CardInfoVo queryCardInfo(String channelCardId);

    CardSecretVo queryCardSecret(String channelCardId);

    CardSecretVo queryCardSecret(String channelCardId,String cardNumber,String expireDate);

    String createCardHolder(CreateCardHolderDto createCardHolderDto);

    String updateCardHolder(UpdateCardHolderDto updateCardHolderDto);

    Boolean transfer(TransferDto transferDto);

    String createShareAccount(CreateShareAccountRequest createShareAccountRequest);


    Boolean setTransactionLimit(SetTransactionLimitRequest setTransactionLimitRequest);
}
